#include <bits/stdc++.h>
using namespace std;
struct F {
  int a, b; //a是分子，b是分母
};
vector<F> num;   //如果不熟悉数组，可以用数组去排序，去重
bool comp1(F x, F y) { return x.a * y.b < x.b * y.a; }
bool comp2(F x, F y) { return x.a * y.b == x.b * y.a; }
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      int k = __gcd(i, j);
      num.push_back({i / k, j / k});
    }
  }
  sort(num.begin(), num.end(), comp1);
  // pos是去重以后vector中没有重复元素的下一个位置的迭代器。
  auto pos = unique(num.begin(), num.end(), comp2);
  // 从容器开始到pos：去重后的容器元素
  for (auto it = num.begin(); it < pos; it++) {
    cout << (*it).a << "/" << (*it).b << endl;
  }
  return 0;
}